package cool.qingqing.streamapi;

/**
 * @author 高山青
 * @Date 2022/1/3  -   14:06
 */

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

/**
 * match方法的使用，作用：判断是否符合条件
 * find方法的使用。作用：查找元素
 * max方法。
 * min方法。
 * reduce组合方法
 * maptoInt方法。
 * concat合并方法
 */
public class StreamApiDemo05 {
	public static void main(String[] args) {
      //match();
		//find();
		//maxAndmin();
		//reduce();
		//mapToInt();
		concat();
	}

	/**
	 * match方法的使用，用来做条件筛选，包括所有，有一个，一个都没有
	 */
	public static void match(){
		List<Integer> list= Arrays.asList(12,342,45,63,2);
		//判断集合是否全部大于2
		boolean r1=list.stream().allMatch(i->i>2);
		System.out.println("判断集合是否全部大于2:"+r1);
		//判断是否有一个大于100
		boolean r2=list.stream().anyMatch(i->i>100);
		System.out.println("判断是否有一个大于100:"+r2);

		//判断没有值大于100
		boolean r3=list.stream().noneMatch(i->i>100);
		System.out.println("判断没有值大于100:"+r3);

	}

	/**
	 * 查找里面的第一个值和任意一个值
	 */
	public static void find(){
		List<Integer> list= Arrays.asList(12,342,45,63,2);
		//返回里面的第一个值
		Optional<Integer> first=list.stream().findFirst();
		System.out.println("返回里面的第一个值："+first);

		//目前还不知道作用
		Optional<Integer> any=list.stream().findAny();
		System.out.println("目前还不知道作用："+any);
	}

	/**
	 * max和min
	 */
	public static void maxAndmin(){
		List<Integer> list= Arrays.asList(12,342,45,63,2);
		//最大值
		Optional<Integer> max = list.stream().max((o1, o2) -> o1 - o2);
		//最小值
		Optional<Integer> min = list.stream().min((o1, o2) -> o1 - o2);
		System.out.println("max="+max.get()+"  "+"min="+min.get());

	}

	public static void reduce(){
		List<Integer> list= Arrays.asList(12,342,45,63,2);
		//求和
		/**
		 * 原理：把0赋值给x,y逐次取集合中的每一个值
		 */
		Integer addSum = list.stream().reduce(0, (x, y) -> x + y);
		System.out.println(addSum);
		//简化写法方法引用
	/*	public static int sum(int a, int b) {
			return a + b;
		}*/
		Integer sum = list.stream().reduce(0, Integer::sum);
		System.out.println(sum);
		//统计a出现的次数
		List<String> sl=Arrays.asList("a","b","c","a","a","g");
		Integer asum = sl.stream().map(s -> "a".equals(s) ? 1 : 0).reduce(0, Integer::sum);
		System.out.println("a出现的次数："+asum);

	}

	/**
	 * 对于自动封装使用
	 */
	public static void mapToInt(){
		List<Integer> list=Arrays.asList(54,34,23,67,32);
		//先转化成int然后在计算
		int sum=list.stream().mapToInt(Integer::valueOf).reduce(0,Integer::sum);
		System.out.println("求和的结果："+sum);
	}

	public static void concat(){
		List<Integer> list=Arrays.asList(54,34,23,67,32);
		List<Integer> list1=Arrays.asList(23,11,22,33,44);
		Stream<Integer> list4 = Stream.concat(list.stream(), list1.stream());
		list4.forEach(i->System.out.print(i+"  "));

	}
}
